home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d6 / bond_dur.arc / DURATION.BAS next >
BASIC Source File  |  1986-11-19  |  5KB  |  93 lines

  1. 10  REM    BOND DURATION PROGRAM
  2. 20  REM    BY BOB EDWARDS - AAII
  3. 30  REM 
  4. 40  REM   SEE MARCH 1984 AAII JOURNAL
  5. 50  REM
  6. 60  CLS : PRINT "    BOND DURATION CALCULATIONS"
  7. 70  PRINT : PRINT "THIS PROGRAM ASSUMES SEMI-ANNUAL": PRINT "INTEREST PAYMENTS.
  8. 80  DIM D(50): DIM Q(50): DIM PC(50):I% = 0
  9. 90  PRINT : PRINT : PRINT "PROVIDE THE FOLLOWING INFORMATION:"
  10. 100 I% = I% + 1
  11. 110  PRINT : PRINT : PRINT "BOND ";I%: PRINT : PRINT : INPUT "WHAT IS THE COUPON RATE? ";C
  12. 120  PRINT : PRINT : INPUT "HOW MANY YEARS TO MATURITY? ";N: PRINT : PRINT : PRINT "WHAT IS THE BOND PRICE": INPUT "AS PERCENT OF PAR VALUE? ";F
  13. 130  PRINT : INPUT "ARE ALL VALUES CORRECT? (YES:Y, NO:N) ";J$: IF J$ = "Y" GOTO 150
  14. 140  CLS : GOTO 110
  15. 150 CD = C * 5:NP = N * 2:M = 10 * F:R = ((1000 - M) / N + 2 * CD) / ((M + 1000) / 2) / 2
  16. 160 RT = (CD - (M - 1000) * R / ((1 + R) ^ NP - 1)) / M
  17. 170 X = 100000! * RT:Z = 100000! * R:L =  ABS (X - Z)
  18. 180  IF L <  = .001 THEN  GOTO 200
  19. 190 R = (RT + R) / 2: GOTO 160
  20. 200 Y = RT * 200:Q = 100:Y =  INT (Y * Q + .5) / Q
  21. 210  CLS : PRINT "BOND ";I%: PRINT "PRICE AS % OF PAR: ";F;"%": PRINT "(PRICE FOR $1000 BOND: $";M;")": PRINT "COUPON: ";C;"%": PRINT "MATURITY: ";N;" YEARS": PRINT "YTM: ";Y;"%"
  22. 220 CM = CD / M:YR = 1 + RT
  23. 230 D = 0!
  24. 240  FOR P = 1 TO NP
  25. 250 D = D + P * CM * (1 / YR) ^ P
  26. 260  NEXT P
  27. 270 D = D + 1000 * NP / (M * (YR ^ NP))
  28. 280 P = 100:D =  INT (.5 * D * P + .5) / P: PRINT : PRINT : PRINT "BOND DURATION: ";D;" YEARS":D(I%) = D
  29. 290  PRINT : PRINT : PRINT : PRINT "WHICH OF THE FOLLOWING CALCULATIONS": PRINT "DO YOU WISH TO PERFORM NEXT?": PRINT : PRINT "  (S) PRICE SENSITIVITY ANALYSIS": PRINT : PRINT "  (D) ANOTHER DURATION": PRINT : PRINT "  (P) PORTFOLIO DURATION"
  30. 300  PRINT : PRINT "  (F) CALCULATIONS FINISHED": PRINT : INPUT "(TYPE S, D, P, OR F) ";V$
  31. 310  CLS : IF V$ = "D" GOTO 100
  32. 320  CLS : IF V$ = "P" GOTO 600
  33. 330  CLS : IF V$ = "F" GOTO 910
  34. 340  CLS : PRINT "  INTEREST RATE SENSITIVITY ANALYSIS"
  35. 350  PRINT : PRINT "BOND ";I%: PRINT "COUPON: ";C: PRINT "PRICE AS % OF PAR: ";F;"%"
  36. 360 M = F * 10
  37. 370  PRINT "(PRICE FOR $1000 BOND: $";M;")": PRINT "MATURITY: ";N;" YEARS": PRINT "YTM:  ";Y;"%"
  38. 380  PRINT : INPUT "WHAT IS THE NEW INTEREST RATE (%)? ";X
  39. 390  PRINT "(PERCENTAGE CHANGE IS APPROXIMATE. NEW"
  40. 400  PRINT " BOND PRICE IS CALCULATED USING THE"
  41. 410  PRINT " NEW INTEREST RATE, AND IS ACCURATE.)"
  42. 420 EL = ( - D) * ((1 + X / 100) - (1 + Y / 100)) / (1 + Y / 100)
  43. 430 P = 100:EL =  INT (100 * EL * P + .5) / P
  44. 440  PRINT : PRINT "THE PERCENTAGE PRICE CHANGE= ";EL;"%"
  45. 450 W = 1
  46. 460 XR = X / 200 + 1
  47. 470 M = 200 * CD / X * (1 - (XR) ^ ( - NP)) + 1000 * XR ^ ( - NP)
  48. 480 P = 100:MP =  INT (M * P + .5) / P:MP = MP / 10
  49. 490  PRINT : PRINT "NEW BOND PRICE: ";MP;" PERCENT OF PAR,"
  50. 500 P = 100:MD =  INT (M * P + .5) / P
  51. 510  PRINT "OR $";MD;" FOR A $1000 BOND."
  52. 520  PRINT : PRINT : PRINT "INDICATE YOUR NEXT CALCULATION:"
  53. 530  PRINT "  (S) ANOTHER INTEREST RATE"
  54. 540  PRINT "  (D) DURATION FOR NEXT BOND"
  55. 550  PRINT "  (P) PORTFOLIO DURATION"
  56. 560  PRINT "  (F) CALCULATIONS FINISHED": INPUT "(TYPE S, D, P, OR F) ";Z$
  57. 570  IF Z$ = "S" GOTO 340
  58. 580  CLS : IF Z$ = "D" GOTO 100
  59. 590  IF Z$ = "F" GOTO 910
  60. 600  FOR I = 1 TO I%: PRINT "BOND ";I,"DURATION ";D(I): NEXT I
  61. 610  GOTO 690
  62. 620  CLS :TD = 0:PT = 0
  63. 630  FOR L = 1 TO (I% - 1): PRINT "BOND ";L,"DURATION: ";D(L): INPUT "       PERCENTAGE OF PORTFOLIO: ";PC(L)
  64. 640 TD = TD + D(L) * PC(L) / 100:PT = PT + PC(L): NEXT L
  65. 650  PRINT "BOND ";I%,"DURATION: ";D(I%): PRINT "          PORTFOLIO PERCENTAGE: ";(100 - PT)
  66. 660 TD = TD + D(I%) * (100 - PT) / 100:W = 1000:TD =  INT (TD * W + .5) / W
  67. 670  PRINT : PRINT "PORTFOLIO DURATION: ";TD;" YEARS"
  68. 680  GOTO 870
  69. 690  PRINT : PRINT 
  70. 700  PRINT "THIS PROGRAM CAN CALCULATE PORTFOLIO": PRINT "COMPOSITION BASED ON DOLLAR VALUES": PRINT "OR PERCENTAGES."
  71. 710  PRINT : INPUT "WHICH DO YOU PREFER? ($ OR %) ";U$
  72. 720  IF U$ = "%" THEN  GOTO 620
  73. 730 TQ = 0
  74. 740  CLS : FOR L = 1 TO I%: PRINT "BOND ";L: INPUT "DOLLAR AMOUNT: $";Q(L):TQ = TQ + Q(L): NEXT L
  75. 750  FOR L = 1 TO I%
  76. 760 PC(L) = Q(L) / TQ
  77. 770 W = 10000
  78. 780 PC(L) = 100 * ( INT (PC(L) * W + .5) / W)
  79. 790  GOTO 800
  80. 800  NEXT L
  81. 810  CLS : FOR L = 1 TO I%
  82. 820  PRINT "BOND ";L; TAB( 9)"PORT %: ";PC(L); TAB( 25)"DUR: ";D(L)
  83. 830  NEXT L
  84. 840 PD = 0
  85. 850  FOR L = 1 TO I%:PD = PD + (PC(L) * D(L) / 100): NEXT L:Q = 1000:PD =  INT (PD * Q + .5) / Q
  86. 860  PRINT : PRINT : PRINT "PORTFOLIO DURATION: ";PD;" YEARS"
  87. 870  PRINT : PRINT : PRINT "DO YOU WISH TO MAKE ANOTHER"
  88. 880  PRINT : PRINT "PORTFOLIO CALCULATION?"
  89. 890  PRINT : INPUT "(YES:Y, NO:N) ";E$
  90. 900  CLS : IF E$ = "Y" GOTO 600
  91. 910  LOCATE 8,24: PRINT "THIS PROGRAM HAS ENDED."
  92. 920  END 
  93.